/*
* @Author: Josh
* @Date:   2019-01-31 13:28:35
* @Last Modified by:   Administrator
* @Last Modified time: 2019-05-02 16:51:39
*/
'use strict';

var _mall                = require('util/mall.js'),
    _cities              = require('util/cities/index.js'),
    _address             = require('service/address-service.js'),
    templateAddressModal = require('./address-modal.string');

var addressModal = {
    show : function(option){
        //option的绑定
        this.option      = option;
        this.option.data = option.data || {};
        this.$modalWrap  = $('.modal-wrap');
        // 渲染页面
        this.loadModal();
        // 绑定事件
        this.bindEvent();
    },
    bindEvent : function(){
        var _this = this;
        //省份与城市的二级联动
        this.$modalWrap.find('#receiver-province').change(function(){
            //取得所选的省份信息
            var selectedProvince = $(this).val();
            _this.loadCities(selectedProvince);
        });

        // 提交收货地址
        this.$modalWrap.find('.address-btn').click(function(){
            var receiverInfo = _this.getReceiverInfo(),
                isUpdate     = _this.option.isUpdate;

            //添加新地址且验证通过
            if(!isUpdate && receiverInfo.status){
                _address.save(receiverInfo.data, function(res){
                    _mall.successTips('地址添加成功');
                    _this.hide();
                    typeof _this.option.onSuccess === 'function' 
                        && _this.option.onSuccess(res);
                }, function(errMsg){
                    _mall.errorTips(errMsg);
                });
            }
            //更新地址且验证通过
            else if(isUpdate && receiverInfo.status){
                _address.update(receiverInfo.data, function(res){
                    _mall.successTips('地址修改成功');
                    _this.hide();
                    typeof _this.option.onSuccess === 'function' 
                        && _this.option.onSuccess(res);
                }, function(errMsg){
                    _mall.errorTips(errMsg);
                });
            }
            //验证不通过
            else{
                _mall.errorTips(receiverInfo.errMsg || '好像哪里不对了~');
            }
        });
        //保证点击modal内容区时不关闭弹窗
        this.$modalWrap.find('.modal-container').click(function(e){
            //阻止事件冒泡
            e.stopPropagation(); 
        });
        //关闭弹窗 点击蒙版区或叉号
        this.$modalWrap.find('.close').click(function(){
            _this.hide(); 
        });
    },
    loadModal : function(){
        var addressModalHtml = _mall.renderHtml(templateAddressModal, {
            isUpdate : this.option.isUpdate,
            data     : this.option.data
        });

        this.$modalWrap.html(addressModalHtml);
        //加载省份
        this.loadProvice();
    },
    //加载省份
    loadProvice : function(){
        var provinces       = _cities.getProvinces() || [],
            $provinceSelect = this.$modalWrap.find("#receiver-province");

        $provinceSelect.html(this.getSelectOption(provinces));

        //如果是更新地址 并且有省份信息
        if(this.option.isUpdate && this.option.data.receiverProvince){
            $provinceSelect.val(this.option.data.receiverProvince);
            //按参数加载城市信息
            this.loadCities(this.option.data.receiverProvince);
        }
    },
    //加载城市信息
    loadCities : function(provinceName){
        var cities      = _cities.getCities(provinceName) || [],
            $citySelect = this.$modalWrap.find("#receiver-city");
        $citySelect.html(this.getSelectOption(cities));

        //如果是更新地址 并且有城市信息
        if(this.option.isUpdate && this.option.data.receiverCity){
            $citySelect.val(this.option.data.receiverCity);
        }
    },
    // 获取表单里收件人信息，并做表单验证
    getReceiverInfo : function(){
        var receiverInfo = {},
            result       = {
                status : false
            };

        receiverInfo.receiverName     = $.trim(this.$modalWrap.find('#receiver-name').val());
        receiverInfo.receiverProvince = this.$modalWrap.find('#receiver-province').val();
        receiverInfo.receiverCity     = this.$modalWrap.find('#receiver-city').val();
        receiverInfo.receiverPhone    = $.trim(this.$modalWrap.find('#receiver-phone').val());
        receiverInfo.receiverAddress  = $.trim(this.$modalWrap.find('#receiver-address').val());
        receiverInfo.receiverZip      = $.trim(this.$modalWrap.find('#receiver-zip').val());

        //如果的更新地址
        if(this.option.isUpdate){
            //缓存接收到的地址id
            receiverInfo.id = this.$modalWrap.find('#receiver-id').val();
        }

        //表单验证
        if(!receiverInfo.receiverName){
            result.errMsg = '请输入收件人姓名';
        }
        else if(!receiverInfo.receiverPhone){
            result.errMsg = '请输入收件人手机号码';
        }
        else if(!_mall.validate(receiverInfo.receiverPhone, 'phone')){
            result.errMsg = '请输入正确的手机号码！';
        }
        else if(!receiverInfo.receiverProvince){
            result.errMsg = '请选择收件人所在省份';
        }
        else if(!receiverInfo.receiverCity){
            result.errMsg = '请选择收件人所在城市';
        }
        else if(!receiverInfo.receiverAddress){
            result.errMsg = '请输入收件人详细地址';
        }
        else{
            result.status = true;
            result.data   = receiverInfo
        }
        return result;
    },
    //获取select框的选项,输入：array，输出：html
    getSelectOption : function(optionArray){
        var html = '<option value="">请选择</option>',
            ArrLength = optionArray.length
        for(var i = 0; i < ArrLength; i++){
            html += '<option value="' + optionArray[i] + '">' + optionArray[i] + '</option>';
        }
        return html;
    },
    //关闭弹窗
    hide : function(){
        this.$modalWrap.empty();
    }
};

module.exports = addressModal;